package com.permission.common;

import com.permission.entity.SysUser;

import javax.servlet.http.HttpServletRequest;

/**
 * 实现登录请求的拦截
 */
public class RequestHolder {

    //保存用户登录的信息，ThreadLocal相当于一个Map，Map里面的key保存当前的进程，我们可以通过他获取当前进程的对象
    //因此可以在多个进程之间分离他的数据，不会出现冲突。这样在高并发的时候，他们可以各自处理各自的数据，这个对象特别有用
    private static final ThreadLocal<SysUser> userHolder = new ThreadLocal<SysUser>();

    private static final ThreadLocal<HttpServletRequest> requestHolder = new ThreadLocal<HttpServletRequest>();

    //往userHolder保存SysUser信息
    public static void add(SysUser sysUser) {
        userHolder.set(sysUser);
    }

    public static void add(HttpServletRequest request) {
        requestHolder.set(request);
    }

    public static SysUser getCurrentUser() {
        return userHolder.get();
    }

    public static HttpServletRequest getCurrentRequest() {
        return requestHolder.get();
    }

    //移除操作，当进程结束的时候需要移除
    public static void remove() {
        userHolder.remove();
        requestHolder.remove();
    }
    
    /*
     * 在什么场合下使用它们？
     * 什么时候add？		登录到后台的时候使用
     * 什么时候remove？    这里我们在 HttpInterceptor使用
     */
}
